home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- FSpTrashFile.c
-
- Move a file to the trash if it is not possible to delete it.
- Can only move file to the trash if it is on the same volume
- as the file to be deleted.
-
- history:
-
- modified: xx/xx/xx who are you? what did you do?
- created: 11/23/94 greg poole
-
- Greg Poole
- Vital Images, Inc.
- 505 N. 4th Street
- Fairfield, IA 52556
- (515) 472-7726
- email: greg@vitalimages.com
-
- ******************************************************************************/
-
- #include <Folders.h>
- #include "FSpTrashFile.h"
-
-
- OSErr FSpTrashFile( FSSpecPtr theFile )
- {
- OSErr theErr = noErr;
- short vRefNum;
- long dirID;
- FSSpec spec;
- FSSpecPtr theTrash = &spec;
-
- // don't go any further if there isn't a file to deal with or if the
- // file was deleted successfully
- //
- theErr = FSpDelete( theFile );
- if ( theErr == fnfErr || theErr == noErr )
- return noErr;
-
- // if we got this far, we had a problem deleting the file,
- // don't worry, relax and just trash it
- //
- theErr = FindFolder( kOnSystemDisk, kTrashFolderType, kDontCreateFolder, &vRefNum, &dirID );
-
- if ( theErr == noErr )
- theErr = FSMakeFSSpec( vRefNum, dirID, "\p", theTrash );
-
- if ( theErr == noErr )
- if ( theFile->vRefNum != theTrash->vRefNum )
- theErr = diffVolErr;
-
- if ( theErr == noErr )
- theErr = CatMove( theFile->vRefNum, theFile->parID, theFile->name,
- theTrash->parID, theTrash->name );
-
- return theErr;
-
- } // end FSpTrashFile
-
-
- // define TEST_TRASH_FILE for a standalone test
- //
- #define TEST_TRASH_FILE
-
- #if defined( TEST_TRASH_FILE )
-
- // local function prototypes
- //
- static void InitTheMac( void );
- static Boolean GetAFile( FSSpecPtr file );
-
- static void InitTheMac( void )
- {
- InitGraf( &qd.thePort );
- InitFonts();
- InitWindows();
- InitMenus();
- TEInit();
- InitDialogs( 0L );
- InitCursor();
- MaxApplZone();
-
- } // end InitTheMac
-
- static Boolean GetAFile( FSSpecPtr file )
- {
- SFTypeList types;
- StandardFileReply reply;
-
- StandardGetFile( NULL, -1, types, &reply );
- if ( reply.sfGood )
- BlockMove( &reply.sfFile, file, sizeof( FSSpec ) );
-
- return reply.sfGood;
-
- } // end GetAFile
-
- void main( void )
- {
- FSSpec srcFileSpec;
- OSErr theErr = noErr;
-
- InitTheMac();
- if ( GetAFile( &srcFileSpec ) )
- theErr = FSpTrashFile( &srcFileSpec );
-
- } // end main
-
- #endif // TEST_TRASH_FILE
-
-